/**
 * @Author：JIAMIN_TANG
 * @Description:泛型练习
 * @CreateTime：2025/10/7 19:17
 */
class MyList<T>{
    private T[] arr = (T[]) new Object[10];//这里其实泛型里的底层还是使用的Object对类型进行赋值的，所以在new一个泛型对象的时候需要进行强制类型转换
    public T get(int index){
        return arr[index];
    }

    public void set(int index,T value){//修改arr里的值使用的函数，这样做可以更好体现封装性，直接使用函数进行数据的修改，避免了数据的直接暴露
        arr[index] = value;
    }
}
public class Java_fanxing {
    public static void main(String[] args){
        //泛型类的创建
        MyList<String> arr1 = new MyList<>();
        arr1.set(0,"hello");
        System.out.println(arr1.get(0));

        MyList<Integer> arr2 = new MyList<>();
        arr2.set(0,100);
        System.out.println(arr2.get(0));

        //泛型中通配符的使用
        MyList<Integer> obj1 = new MyList<>();
        MyList<String> obj2 = new MyList<>();

        MyList<?> obj3 = obj2;//这句代码的意思是obj3可以指向任何类型的MyList对象，什么类型的MyList对象给可以赋值给它
        obj3 = obj1;//obj1是MyList<Integer>类型的对象，也可以赋值给obj3，上面的obj2是MyList<String>类型的对象，也可以赋值给obj3

        MyList<?extends Number> obj4 = obj1;//这句代码的意思是obj4里的T的类型要是属于Number的子类才可以给obj4赋值，
        // 比如MyList<Integer>、MyList<Double>等


    }
}

